// 文件名：c_string_demo.c
#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define MAX_LEN 100

// 1. 合并两个字符串（安全版本）
void safe_strcat(char *dest, const char *src, size_t dest_size) {
    size_t dest_len = strlen(dest);
    size_t src_len = strlen(src);
    
    if (dest_len + src_len + 1 > dest_size) {
        printf("错误：缓冲区空间不足\n");
        return;
    }
    
    strncat(dest, src, dest_size - dest_len - 1);
}

// 2. 查找子串位置（返回所有出现位置）
void find_all_occurrences(const char *str, const char *substr) {
    const char *pos = str;
    int count = 0;
    
    printf("'%s'中，'%s'出现位置：", str, substr);
    while ((pos = strstr(pos, substr)) != NULL) {
        printf("%ld ", pos - str);
        pos += strlen(substr);
        count++;
    }
    
    if (count == 0) {
        printf("未找到");
    }
    printf("\n");
}

// 3. 统计单词数量
int count_words(const char *str) {
    int count = 0;
    int in_word = 0;
    
    while (*str) {
        if (isalpha(*str)) {
            if (!in_word) {
                count++;
                in_word = 1;
            }
        } else {
            in_word = 0;
        }
        str++;
    }
    
    return count;
}

int main() {
    char str1[MAX_LEN] = "Hello";
    char str2[MAX_LEN] = " World!";
    char text[MAX_LEN] = "This is a sample text with sample words";
    
    // 1. 字符串合并
    safe_strcat(str1, str2, MAX_LEN);
    printf("合并结果: %s\n", str1);
    
    // 2. 查找子串
    find_all_occurrences(text, "sample");
    find_all_occurrences(text, "hello");
    
    // 3. 统计单词
    printf("单词数量: %d\n", count_words(text));

    printf("%s 单词数量: %d\n", "a2b4c", count_words("a2b4c"));
    
    return 0;
}